package com.sisgesbyte.dao.proyeccion;

import java.util.List;

import javax.ejb.Stateless;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.utilDao.CreaFiltroSqlString;
import com.sisgesbyte.data.entity.proyeccion.ProyeccionCategoriaGeneralEntity;
import com.sisgesbyte.data.entity.proyeccion.ProyeccionCategoriaProdEntity;
import com.sisgesbyte.data.util.AbstractFacade;

@Stateless
public class ManProyeccionCategoriaProdDaoImpl extends AbstractFacade<ProyeccionCategoriaProdEntity> implements
		ManProyeccionCategoriaProdDao {

	@Inject
	private CreaFiltroSqlString creaFiltroSqlString;
	
	@PersistenceContext(unitName = "SigesSiscompPU")
	private EntityManager em;

	@Override
	protected EntityManager getEntityManager() {
		return em;
	}
	
	public ManProyeccionCategoriaProdDaoImpl(){
		super(ProyeccionCategoriaProdEntity.class);
	}
	
	@Override
	public List<ProyeccionCategoriaProdEntity> listarProyeccionCategoria( FiltrosSQLBean cadenaFiltros) {
		StringBuilder jpql = new StringBuilder();
		jpql.append("SELECT pcp.id, pcp.categoria_producto_id,cp.nombre categoria,cp.descripcion,cp.padre_id, ");
		jpql.append("cp.codigo_banda banda_general,cp.item, pcp.periodo_id, pcp.monto_proyectado, pcp.codigo_banda banda_periodo  ");
		jpql.append("FROM proyeccion.proyeccion_categoria_producto pcp  ");
		jpql.append("inner join administracion.categoria_producto cp on pcp.categoria_producto_id = cp.id ");
		// concatenamos el filtro
		if (cadenaFiltros != null) {
			StringBuilder filtro = new StringBuilder();
			filtro.append(creaFiltroSqlString.concatenar(cadenaFiltros));
			jpql.append(filtro.toString());
		}
		System.out.println(jpql.toString());
		Query query = em.createNativeQuery(jpql.toString(), ProyeccionCategoriaProdEntity.class);
		if (cadenaFiltros != null && cadenaFiltros.getListaValores() != null
				&& cadenaFiltros.getListaValores().size() > 0) {
			int num = 0;
			for (Object valor : cadenaFiltros.getListaValores()) {
				System.out.println("valor: "+valor);
				query.setParameter(++num, valor);
			}
		}
		List<ProyeccionCategoriaProdEntity> ls = query.getResultList();

		return ls;
	}

	@Override
	public List<ProyeccionCategoriaGeneralEntity> listaProyeccionCategoriaGeneral() {
	
		StringBuilder jpql = new StringBuilder();
		jpql.append("select categoria_producto_id, sum(monto_proyectado) proyeccion_general from proyeccion.proyeccion_categoria_producto ");
		jpql.append("group by categoria_producto_id ");

		Query query = em.createNativeQuery(jpql.toString(), ProyeccionCategoriaGeneralEntity.class);
		
		List<ProyeccionCategoriaGeneralEntity> ls = query.getResultList();
		
		return ls;
	}

}
